package pe.gob.osce.sirenas.svc;

import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.log4j.Logger;

import pe.gob.osce.sirenas.dao.PersonaDAOLocal;
import pe.gob.osce.sirenas.dao.SolicitudInscripcionDAOLocal;
import pe.gob.osce.sirenas.dao.convert.SolicitudInscripcionConvert;
import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.PersonaDTO;
import pe.gob.osce.sirenas.model.SolicitudInscripcionDTO;
import pe.gob.osce.sirenas.model.jpa.SolicitudInscripcion;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;
import pe.gob.osce.sirenas.util.NegocioException;

/**
 * Session Bean implementation class SolicitarInscripcionService
 */
@Stateless(mappedName = "SolicitarInscripcionService")
public class SolicitarInscripcionServiceImpl implements SolicitarInscripcionServiceLocal {
	final static Logger log = Logger.getLogger(SolicitarInscripcionServiceImpl.class);

	private ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	
	@EJB
	private	SolicitudInscripcionDAOLocal	solicitudInscripcionDAOLocal;
	@EJB
	private	PersonaDAOLocal	personaDAOLocal;
	@EJB
	private RegistrarNotificacionServiceLocal  registrarNotificacionService;

	@Override
	public	SolicitudInscripcionDTO guardarSolicitudInscripcion( SolicitudInscripcionDTO solicitudInscripcionDTO,AuditoriaDTO auditoriaDTO)
			throws Exception {
		SolicitudInscripcion		solicitudInscripcionJPA=null;
		
		try{
			/* Insertar Solicitud */
			solicitudInscripcionJPA= SolicitudInscripcionConvert.createJPA(solicitudInscripcionDTO,auditoriaDTO);
			solicitudInscripcionJPA= solicitudInscripcionDAOLocal.insertar(solicitudInscripcionJPA);
			/* OBTENER ESTRUCTURA DE LO GUARDADO */
			solicitudInscripcionDTO= SolicitudInscripcionConvert.createDTO(solicitudInscripcionJPA);
			
		} catch (ModeloException e) {
			throw new Exception(e.getMessage(),e);
		} catch (Exception e) {
			throw new NegocioException(propSirenas.getString(ConstanteEJB.EXC_NEGOCIO_PROCESO));
		}
		return solicitudInscripcionDTO;
	}
	
	@Override
	public	void notificarViaCorreoElectronico(String toEmail,String rutaArchivo) throws Exception {
		SolicitudInscripcion		solicitudInscripcionJPA=null;
		
		try{
			registrarNotificacionService.enviarCorreoNotificacionArchivoAdjunto(toEmail, 
					propSirenas.getString(ConstanteEJB.NOTIF_SOLICITUD), 
					propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_SOLICITUD), 
					rutaArchivo);

		}catch (Exception e) {
			throw new NegocioException(propSirenas.getString(ConstanteEJB.EXC_NEGOCIO_NOTIFICACION ));
		}
	}
	
	@Override
	public boolean validaExisteRegistroSolicitudVigente(SolicitudInscripcionDTO solicitudDTO)throws Exception{
		try{
			List<SolicitudInscripcionDTO> listaSolicitudes = solicitudInscripcionDAOLocal.obtieneListaSolicitud(solicitudDTO);
			if(!listaSolicitudes.isEmpty()){
				return true;
			}
		}catch (Exception e) {
			throw new NegocioException(propSirenas.getString(ConstanteEJB.EXC_NEGOCIO_NOTIFICACION ));
		}
		return false;
	}
	@Override
	public boolean validaExisteRegistroPersona(SolicitudInscripcionDTO solicitudDTO)throws Exception{
		try{
			PersonaDTO personaDTO = personaDAOLocal.obtenerPersona(null, Long.parseLong(solicitudDTO.getNumRuc()),solicitudDTO.getNumDocumento());
			if(personaDTO!=null){
				return true;
			}
		}catch (Exception e) {
			throw new NegocioException(propSirenas.getString(ConstanteEJB.EXC_NEGOCIO_NOTIFICACION ));
		}
		return false;
	}
}
